
#include "unit_sphere_quadrature.hpp"

namespace neon
{
unit_sphere_quadrature::unit_sphere_quadrature(point const p)
{
    switch (p)
    {
        case point::BO21:
        {
            // 21 point unit sphere Gaussian quadrature scheme assuming orthogonal
            // symmetry see Bazant and Oh (1986) Table 1 on Page 43

            // Weightings for unit sphere
            constexpr double w1 = 0.0265214244093 * 2.0, w2 = 0.0199301476312 * 2.0,
                             w3 = 0.0250712367487 * 2.0;
            m_weights = {w1, w1, w1, w2, w2, w2, w2, w2, w2, w3, w3,
                         w3, w3, w3, w3, w3, w3, w3, w3, w3, w3};

            // Directional cosines from unit sphere integration
            constexpr double dc0 = 0.707106781187, dc1 = 0.387907304067, dc2 = 0.836095596749;
            m_coordinates = {{0, 1.0, 0.0, 0.0},    {1, 0.0, 1.0, 0.0},    {2, 0.0, 0.0, 1.0},
                             {3, dc0, dc0, 0.0},    {4, dc0, -dc0, 0.0},   {5, dc0, 0.0, dc0},
                             {6, dc0, 0.0, -dc0},   {7, 0.0, dc0, dc0},    {8, 0.0, dc0, -dc0},
                             {9, dc1, dc1, dc2},    {10, dc1, dc1, -dc2},  {11, dc1, -dc1, dc2},
                             {12, dc1, -dc1, -dc2}, {13, dc1, dc2, dc1},   {14, dc1, dc2, -dc1},
                             {15, dc1, -dc2, dc1},  {16, dc1, -dc2, -dc1}, {17, dc2, dc1, dc1},
                             {18, dc2, dc1, -dc1},  {19, dc2, -dc1, dc1},  {20, dc2, -dc1, -dc1}};

            break;
        }
        case point::BO33:
        {
            // 21 point unit sphere Gaussian quadrature scheme assuming orthogonal
            // symmetry see Bazant and Oh (1986) Table 1 on Page 43

            // Weightings for unit sphere
            constexpr double w1 = 2.0 * 0.00985353993433, w2 = 2.0 * 0.0162969685886,
                             w3 = 2.0 * 0.0134788844008, w4 = 2.0 * 0.0175759129880;

            m_weights = {w1, w1, w1,                                     //
                         w2, w2, w2, w2, w2, w2,                         //
                         w3, w3, w3, w3, w3, w3, w3, w3, w3, w3, w3, w3, //
                         w4, w4, w4, w4, w4, w4, w4, w4, w4, w4, w4, w4};

            // Directional cosines from unit sphere integration
            constexpr double dc0 = 0.707106781187, dc1 = 0.933898956394, dc2 = 0.357537045978,
                             dc3 = 0.437263676092, dc4 = 0.785875915868;
            m_coordinates = {{0, 1.0, 0.0, 0.0}, // 1
                             {1, 0.0, 1.0, 0.0}, // 2
                             {2, 0.0, 0.0, 1.0}, // 3

                             {3, dc0, dc0, 0.0},  // 4
                             {4, dc0, -dc0, 0.0}, // 5
                             {5, dc0, 0.0, dc0},  // 6
                             {6, dc0, 0.0, -dc0}, // 7
                             {7, 0.0, dc0, dc0},  // 8
                             {8, 0.0, dc0, -dc0}, // 9

                             {9, dc1, dc2, 0.0},   // 10
                             {10, dc1, -dc2, 0.0}, // 11
                             {11, dc2, dc1, 0.0},  // 12
                             {12, dc2, -dc1, 0.0}, // 13

                             {13, dc1, 0.0, dc2},  // 14
                             {14, dc1, 0.0, -dc2}, // 15
                             {15, dc2, 0.0, dc1},  // 16
                             {16, dc2, 0.0, -dc1}, // 17

                             {17, 0.0, dc1, dc2},  // 18
                             {18, 0.0, dc1, -dc2}, // 19
                             {19, 0.0, dc2, dc1},  // 20
                             {20, 0.0, dc2, -dc1}, // 21

                             {21, dc3, dc3, dc4},   // 22
                             {22, dc3, dc3, -dc4},  // 23
                             {23, dc3, -dc3, dc4},  // 24
                             {24, dc3, -dc3, -dc4}, // 25

                             {25, dc3, dc4, dc3},   // 26
                             {26, dc3, dc4, -dc3},  // 27
                             {27, dc3, -dc4, dc3},  // 28
                             {28, dc3, -dc4, -dc3}, // 29

                             {29, dc4, dc3, dc3},    // 30
                             {30, dc4, dc3, -dc3},   // 31
                             {31, dc4, -dc3, dc3},   // 32
                             {32, dc4, -dc3, -dc3}}; // 33

            break;
        }
        case point::BO61:
        {
            // Weightings for unit sphere
            constexpr auto weight1 = 0.00795844204678;
            constexpr auto weight2 = 0.0105155242892;
            constexpr auto weight3 = 0.0100119364272;
            constexpr auto weight4 = 0.00690477957966;

            m_weights.resize(61);

            std::fill(begin(m_weights), std::next(begin(m_weights), 10), weight1);
            std::fill(std::next(begin(m_weights), 10), std::next(begin(m_weights), 16), weight2);
            std::fill(std::next(begin(m_weights), 16), std::next(begin(m_weights), 31), weight3);
            std::fill(std::next(begin(m_weights), 31), end(m_weights), weight4);

            m_coordinates = {{0, 0, 0, 1},
                             {1, 0.996972891319, 0, -0.077749945174},
                             {2, -0.982581060536, -0.178228496639, 0.052621881972},
                             {3, 0.783068336711, 0.621935399592, -0.000582043422},
                             {4, 0.495365041556, 0.804616360278, 0.327423255707},
                             {5, -0.268566696162, -0.734252990559, 0.62349376546},
                             {6, -0.518797826849, 0.854890674061, 0.003278758983}};

            throw std::domain_error("Sphere integration rule BO61 not yet implemented");
            break;
        }
        case point::FM900:
        {
            // 900 quadrature point scheme on the unit sphere.  This should only
            // be used for model verification or validation due to the computational
            // expense

            // Compute using a non-linear optimisation technique and made available
            // Accessed 09.10.2017 http://www.personal.soton.ac.uk/jf1w07/nodes/nodes.html

            m_weights.reserve(900);
            m_coordinates.reserve(900);

            m_weights = {0.010473994026438,     0.0178538470440252,  0.0143651999597186,
                         0.0169079005937576,    0.0155904051592632,  0.0157065125730888,
                         0.0145123186712136,    0.0137152551377335,  0.0171455054673552,
                         0.0169520615919286,    0.0132975361753646,  0.013732183535737,
                         0.0140323333102992,    0.0118809084097433,  0.0145032001056799,
                         0.00871650511030435,   0.0204701561429657,  0.0252397916275644,
                         0.0128426303727738,    0.0150387236980294,  0.016160552239053,
                         0.010964156241955,     0.0117951173088939,  0.014965672701987,
                         0.019714648770128,     0.0218341483980652,  0.0132733434931552,
                         0.0105698007858874,    0.0150609795610399,  0.0146007192855017,
                         0.0271456082469841,    0.015130200969384,   0.0167347573436768,
                         0.0146688203288443,    0.0105761607606182,  0.0142420743715979,
                         0.014852520223242,     0.0015570987789989,  0.0217356807945822,
                         0.00919522484776165,   0.0123212209553464,  0.0143923885618574,
                         0.00990305238991048,   0.0122904031692632,  0.0110167976757318,
                         0.0145765375052729,    0.0131530962097501,  0.0141906587139638,
                         0.0145566730022185,    0.00758458166076894, 0.00947219111388667,
                         0.0127284497502683,    0.0188795702132187,  0.0166898283160966,
                         0.0166377070835313,    0.00864100772138693, 0.0108841291307787,
                         0.0164377129325481,    0.0169171368555557,  0.0162301106714405,
                         0.0161595016462791,    0.0154508928099058,  0.0140372484743696,
                         0.00881228776778448,   0.0183888912628134,  0.00970613069464809,
                         0.0116749134976149,    0.0209620425921448,  0.00508818991981437,
                         0.0113416466001869,    0.0138047319304686,  0.0106279150689676,
                         0.0148477263993528,    0.0150186358731031,  0.0126407663791459,
                         0.0133975968714992,    0.00779960188726086, 0.0186903568050351,
                         -0.000910463023759978, 0.0102634322678495,  0.015679962972784,
                         0.0186699227108308,    0.0161813999449684,  0.0121338252668362,
                         0.0161204022804796,    0.0148862022897024,  0.0177540689787818,
                         0.00941810723833276,   0.0118742946469729,  0.0136102682458684,
                         0.0135904901745587,    0.0183938636624654,  0.0188912658169032,
                         0.0109120214313113,    0.0108279884705066,  0.0114849309575112,
                         0.0222444229894742,    0.0122047725379152,  0.00933398973829727,
                         0.0135840498306168,    0.0107853480418492,  0.0101583825346368,
                         0.0104267795270999,    0.0111243359914793,  0.0130749439434855,
                         0.0188603794218748,    0.0106875496116521,  0.0130521992444221,
                         0.0177919580376156,    0.0137389950101356,  0.0153001220332597,
                         0.00958085190787836,   0.013513326467758,   0.025497913633817,
                         0.0141884652051319,    0.00937890558872874, 0.0147567556021703,
                         0.011754045726857,     0.00909479440212687, 0.0138642466687013,
                         0.0098171266911263,    0.011224399948674,   0.023107611625423,
                         0.00839790120002204,   0.0135514707683547,  0.0139802267644904,
                         0.0167852955596306,    0.010907170337004,   0.0164761461710532,
                         0.00414187813635133,   0.0178039742199054,  0.0173215371669061,
                         0.0102261630266939,    0.00995915771644804, 0.0131342240263732,
                         0.0153939741433271,    0.0135512771266246,  0.0121296899069461,
                         0.0160378042455042,    0.0102471316849598,  0.0182369553716508,
                         0.0149374828108569,    0.0112272853885936,  0.0158334489664512,
                         0.0180870000506465,    0.014128304805556,   0.0118587149004652,
                         0.0131244106524678,    0.0060651091380602,  0.0113044023946591,
                         0.0197979437539374,    0.00990495237073212, 0.0182113189228565,
                         0.0104595336196385,    0.0118886348721088,  0.00966360822807117,
                         0.0109417785760515,    0.0133646265663665,  0.0146454357932285,
                         0.0103493731339234,    0.0129215822617083,  0.014008026831696,
                         0.0158316957096287,    0.0172288632463884,  0.0134385746580755,
                         0.0152739111369555,    0.0188125486022369,  0.0143092804059729,
                         0.0175438142494626,    0.0147976841225074,  0.0135739568575762,
                         -0.000152233167732647, 0.0115955744771499,  0.00908625658795686,
                         0.0110661009035318,    0.0128931235454333,  0.0210388192171754,
                         0.015592293230604,     0.00835377147460105, 0.0124717021512732,
                         0.0100879211689766,    0.0134482591235691,  0.0189201562661577,
                         0.0151455375992619,    0.0110099097067843,  0.0130606750256846,
                         0.0146097105323139,    0.0166652175429569,  0.0192080128746857,
                         0.0193986906989259,    0.0114750905370722,  0.00872952840050096,
                         -0.00312153305795866,  0.0144846231317475,  0.0161438769622299,
                         0.0126073662695702,    0.00350470418028569, 0.0112279318210452,
                         0.0117717152623574,    0.0168655297335895,  0.0159783226287484,
                         0.0142008564912646,    0.0144878228206484,  0.0149276748630299,
                         0.0161088588928735,    0.00896916814521971, 0.00951948160595341,
                         0.0109244224188944,    0.0199016257854719,  0.0181837169119983,
                         0.0134898231511448,    0.0127072455892678,  0.0030384999370277,
                         0.0133356087051018,    0.0129351638390838,  0.0172003540430233,
                         0.013394350798675,     0.0119527707031338,  0.00899453158264795,
                         0.0179541660743989,    0.0149986061955981,  0.0134732283490562,
                         0.0196899861254018,    0.0142100433946321,  0.0147690339528562,
                         0.0106544892186101,    0.0116953719404076,  0.0170712084658335,
                         0.0183996168326717,    0.00969240122727908, 0.0163993186395414,
                         0.0212075342505202,    0.016340450039967,   0.0142772373806268,
                         0.0149414055427226,    0.0151893573254426,  0.00977672185907521,
                         0.0138585676285025,    0.00373427839472108, 0.0152943312769292,
                         0.0112449144517305,    0.0132302584672792,  0.0186904031720965,
                         0.00950121841174489,   0.0082559185211696,  0.013139074601026,
                         0.0183916762703523,    0.0172901381442618,  0.0170250268504606,
                         0.0132927192697364,    0.00952805698571788, 0.00685281143153299,
                         0.0168840242551584,    0.0142162685873703,  0.00976756600465706,
                         0.0154268880172752,    0.0150613488766806,  0.0102639881184232,
                         0.0103516403946573,    0.0123542298939782,  0.0115000247310245,
                         0.0108221681754685,    0.0100816313925606,  0.014948605890195,
                         0.012093622488939,     0.0180677776524792,  0.0184677092048637,
                         0.00741019620951756,   0.0167610470893473,  0.0172054205333895,
                         0.0105561847294146,    0.00923631223319547, 0.0104160238740493,
                         0.0138134713120791,    0.0203373769767895,  0.00939829368453411,
                         0.0174734114675855,    0.016822965642088,   0.0143049630981777,
                         0.0100784852364818,    0.0181544031619994,  0.0156478618818632,
                         0.0178455731850318,    0.0141004618000604,  0.0159195128920424,
                         0.0182187230766769,    0.0190884149823999,  0.0106078909136708,
                         0.0218978916659524,    0.00914685785339894, 0.0130625089118533,
                         0.0112095457346029,    0.0145488334608868,  0.0178058308264068,
                         0.0182446212440204,    0.0141928366868247,  0.0199887387405119,
                         0.0148659738116527,    0.0156700991306311,  0.010403918642662,
                         0.0090603284962655,    0.00838838396195948, 0.00947791372696123,
                         0.020308892314262,     0.0128874625734505,  0.0169430710167226,
                         0.0118717516180934,    0.0167198061536797,  0.0148789336773806,
                         0.0149817206671204,    0.0195134395257715,  0.0115018934044414,
                         0.0152972647574942,    0.0117132918440179,  0.019084297696675,
                         0.0115582743331896,    0.0162293444343992,  0.00964440018570751,
                         0.0123678958286232,    0.0153852895448913,  0.0171515424349016,
                         0.0157037623834343,    0.0218582417426389,  0.0113467816830437,
                         0.015479639285131,     0.011697799843255,   0.013490515225943,
                         0.00697587883015649,   0.0239480069237522,  0.0195380706928264,
                         0.0152537981952052,    0.00953428980041073, 0.0135728121201053,
                         0.0148999477919655,    0.0103273595320778,  0.0206375190864155,
                         0.0137123175848029,    0.0134757367398911,  0.0187401756133975,
                         0.0147491232728906,    0.0127720864906552,  0.0165389357224725,
                         0.0153948658850204,    0.0126994604863762,  0.00592183677300995,
                         0.0010871328454014,    0.0150762800121885,  0.0227743345045474,
                         0.0188108664651193,    0.0245601831125823,  0.0148748937266418,
                         0.0166451269170984,    0.00940507650092529, 0.0129638494966711,
                         0.0166324797106349,    0.0144044657229571,  0.0145786521862655,
                         0.0175704450812314,    0.0153480954080094,  0.025133115507424,
                         0.0200975697136706,    0.0282240330835522,  0.00839696134495854,
                         0.0117999797923503,    0.0128003220044984,  0.018127506391684,
                         0.0120767425695707,    0.00181925601271946, 0.0113470444289519,
                         0.0181798327626024,    0.00875806293707845, 0.0184443614759023,
                         0.01033630201218,      0.0167555913171315,  0.0127039495595362,
                         0.0181630885195097,    0.0105349992937647,  0.0180220721971613,
                         0.0107919626781121,    0.0153721339861058,  0.00917192454409676,
                         0.0135659711022253,    0.0117016074694741,  0.0165631460282965,
                         0.0195769427847624,    0.0116517395558896,  0.0172602337714992,
                         0.0159579671129871,    0.0134478295477725,  0.0183917279803408,
                         0.0137726828829066,    0.0160224084132926,  0.0164073099352356,
                         0.0175378069594333,    0.0242118019261882,  0.0168429926727214,
                         0.0198824458221361,    0.0153382584148159,  0.010314661389207,
                         0.0146673729458447,    0.00649015663838331, 0.0181114664252409,
                         0.0119597740867369,    0.0143544583910236,  0.0173920776739507,
                         0.0152298156196331,    0.0116096063640908,  0.0108026149373599,
                         0.00919086950626173,   0.0108761777532797,  0.0116322160471067,
                         0.0148236296959185,    0.0148417165787004,  0.0191203269221395,
                         0.0167775094997233,    0.0165948755002086,  0.0155113592515159,
                         0.0158835945190347,    0.0113326630034694,  0.0120033631208875,
                         0.0153001805482457,    0.0199282064810789,  0.0171347127575373,
                         0.0119009026569555,    0.0207562819578613,  0.0131095881793515,
                         0.0176867913224388,    0.01158121757803,    0.0172427059408765,
                         0.0168908045120742,    0.0100336932043819,  0.0111359427446749,
                         0.0134625669590794,    0.0156220148615685,  0.0171644429016959,
                         0.0148861084074994,    0.0140094203629157,  0.0124905151786169,
                         0.0169479186909985,    0.0131276831011819,  0.0171858718575549,
                         0.0132335814622098,    0.00994979059309207, 0.0157664567999487,
                         0.0182770640260826,    0.0120192509171303,  0.00894208174473244,
                         0.0106795316288555,    0.0145071388893553,  0.0123419851684986,
                         0.00957417129902451,   0.0159308762549718,  0.01535238707826,
                         0.0200200276369719,    0.00950870889932508, 0.0143334138596542,
                         0.02052336292004,      0.0156205320957516,  0.0107565429024734,
                         0.0149887993160276,    0.0137999759762923,  0.0119823234071684,
                         0.0184137975043185,    0.0163518264064283,  0.0118271631801178,
                         0.0148402098825823,    0.0158487785347739,  0.0149766591731095,
                         0.0147222714695985,    0.020254394643324,   0.0186711840292824,
                         0.0141513527878625,    0.0162401489110883,  0.0167374781953584,
                         0.0167805108710496,    0.0148721034553501,  0.0116530771914762,
                         0.0178648938790858,    0.0182966806590757,  0.0124966173577662,
                         0.0140529955029623,    0.0130349201623914,  0.0120019554907495,
                         0.0142791856973841,    0.00394506762504652, 0.0119815043994841,
                         0.0174762586705333,    0.0150175024461442,  0.0134027354104771,
                         0.0167775468505834,    0.0164721987840469,  0.0156346141873317,
                         0.0167372807395218,    0.0172440849402096,  0.00837178299402147,
                         0.0192030358844472,    0.00955080595873732, 0.0116383359307908,
                         0.00877714623520155,   0.012144015613633,   0.0144499089330731,
                         0.013233840950637,     0.0129633575346085,  0.0148351668417136,
                         0.0106351486138324,    0.0113452860184993,  0.0122697194426183,
                         0.00886586819686048,   0.0114296831581874,  0.0139286991889793,
                         0.0168864587554579,    0.0174142097498637,  0.0170120425932853,
                         0.013816955647476,     0.0137099015687459,  0.0184556257597647,
                         0.0139778423811306,    0.0118686229009389,  0.0166174943418704,
                         0.0180841349898664,    0.0145094852753048,  0.0205261541854052,
                         0.0128492545425155,    0.0116359865802016,  0.0119355193049048,
                         0.00527496610009023,   0.0154753508344455,  0.0114380946660916,
                         0.0174532416469302,    0.00918192671893293, 0.00502388931195587,
                         0.00642338519341207,   0.0120604350155798,  0.0106355039407887,
                         0.0116473939642596,    0.0140349458379271,  0.00692661284692453,
                         0.0124831285410393,    0.0110938189704699,  0.0134736996703443,
                         0.0121496913374644,    0.00827759390997712, 0.0144552813342577,
                         0.0152153220162664,    0.00804159453380205, 0.0138253737514369,
                         0.0131377693545769,    0.0146914993521267,  0.0144011800886635,
                         0.0173252725207218,    0.0144085628673731,  0.0150049684961906,
                         0.00748514103816911,   0.013961897055089,   0.0141998054698686,
                         0.0162965397563322,    0.00444394111529147, 0.0154533010844588,
                         0.0101884572774507,    0.0152647328380875,  0.0034378937664176,
                         0.0164801659413783,    0.0110134526576907,  0.020358978111247,
                         0.0166962573842421,    0.0152750636455919,  0.015469479013657,
                         0.0115021003493163,    0.0136190400355528,  0.0109677500376035,
                         0.0163694885271483,    0.0137087933783623,  0.0121470712116705,
                         0.0123224595077278,    0.01642417945676,    0.0132251923044116,
                         0.0168265224636323,    0.0081969148044739,  0.00976747451788506,
                         0.0165728547812348,    0.0138716650317811,  0.0209911575968038,
                         0.0181799795949736,    0.0175198526792336,  0.0112349241437687,
                         0.017091107748563,     0.021068235156254,   0.00889074039943687,
                         0.0131709151645955,    0.0103103414985549,  0.0119716279075312,
                         0.0175911320903133,    0.0121699243556402,  0.0129155635954464,
                         0.0163373056543439,    0.0159853911174997,  0.017141023970255,
                         0.00916363511543102,   0.0116154656122876,  0.0137731832011599,
                         0.0158271386941572,    0.0206914224130352,  0.0153980036852407,
                         0.0130558120047704,    0.0154110894031118,  0.0183266902017484,
                         0.0193168594566017,    0.0108948246294813,  0.0108892172297387,
                         0.0160385825735334,    0.0171911724681041,  0.0120242022668828,
                         0.0162148225333363,    0.0141276277587659,  0.0100173841066658,
                         0.0144963387566027,    0.0104848827784116,  0.0110214440612947,
                         0.0155127858418899,    0.018721857878793,   0.017817598994963,
                         0.0101929722576559,    0.0225359670839078,  0.0183267028693393,
                         0.010394133670126,     0.0158988414628807,  0.0101711201803336,
                         0.00646935301385551,   0.0149822167877853,  0.01140113563173,
                         0.00837571435044951,   0.0140829384461135,  0.0142451609706869,
                         0.00600406686013335,   0.0174541475307128,  0.0133718912150209,
                         0.014412719768458,     0.0202806301537656,  0.0156353799814681,
                         0.0165770371428865,    0.0213559716847954,  0.0146924333472611,
                         0.0109295265163395,    0.0147275865179239,  0.0147574126298363,
                         0.0137650811386889,    0.0129197753729985,  0.0198206042012426,
                         0.0125486811001246,    0.0162238864355448,  0.0140330535850958,
                         0.0127437305269131,    0.0179392657835683,  0.0119905864427425,
                         0.0135370758403786,    0.0180627529112334,  0.0118365371473519,
                         0.00984470988312308,   0.0115000948301416,  0.0184365071384207,
                         0.0132063969638487,    0.00361563524837877, 0.00901775816589112,
                         0.0149818121577875,    0.00748475863223341, 0.00421650107400163,
                         0.0161048663993165,    0.0129155710692186,  0.0162166714012352,
                         0.0118252551325936,    0.0117036802083895,  0.0162040163644878,
                         0.00750644965741343,   0.0127041630842753,  0.016837219137116,
                         0.0139642461726425,    0.0156450084944494,  0.02132735407655,
                         0.0123184671555687,    0.0132975865948288,  0.0155638417103458,
                         0.0174141291593673,    0.00930826003058179, 0.00884940766751209,
                         0.0171967902777995,    0.0140892657347375,  0.00874830164665838,
                         0.0180536605541486,    0.0146829648091166,  0.0103704225345212,
                         0.0156563881329164,    0.00978543171377527, 0.00355857675448649,
                         0.0235598173630205,    0.0109741794823426,  0.0121233614675237,
                         0.0148400452387897,    0.0198629600464912,  0.0141172114862371,
                         0.01342871665773,      0.0123302244518825,  0.0156497880667315,
                         0.0142067595025079,    0.0132613261484567,  0.0146906137610239,
                         0.0103597304505976,    0.00509444054840348, 0.0242468489095213,
                         0.0130690556759968,    0.0198364725289621,  0.0111975171082439,
                         0.0127439260669435,    0.0174857879332639,  0.0117439983230114,
                         0.0150765336700547,    0.0174657410805598,  0.0168519539370642,
                         0.019573419832363,     0.0158041085189489,  0.0155378912573939,
                         0.0127812271252996,    0.0124098700497924,  0.013268428764483,
                         0.0100754554411051,    0.00928059150629443, 0.0153779598873593,
                         0.0146613875121625,    0.0139904364619962,  0.010667143577269,
                         0.0140840743756927,    0.0154470287945936,  0.0132290631145175,
                         0.00951218599325113,   0.0114453441958119,  0.014286050521568,
                         0.0116651332733711,    0.0160070840091564,  0.0140007162119262,
                         0.0243772439890451,    0.0221965082054191,  0.0165888217951741,
                         0.0100983718734755,    0.0130670245387451,  0.0108477824788782,
                         0.0181357576215348,    0.00975326078754184, 0.00354106595077673,
                         0.0258504869855527,    0.00918888438167046, 0.00781278034079638,
                         0.0103079029952125,    0.0111664541327436,  0.0121527924313297,
                         0.0163489292755912,    0.0104449653324872,  0.0120939464660207,
                         0.0223445430732973,    0.0120798081765748,  0.0107320804625299,
                         0.00980763958179663,   0.0285900908079323,  0.0179019707775292,
                         0.0148753782115148,    0.011140275592482,   0.0123335056139837,
                         0.0195028015762311,    0.00892631873306101, 0.0184929464920115,
                         0.0200833526563426,    0.00663296701919087, 0.018961687373784,
                         0.0171133465473891,    0.00663458054951965, 0.0209516955856905,
                         0.0138110311979133,    0.0137477829001463,  0.0133435157755283,
                         0.0190960576272489,    0.0125202123345954,  0.0158358024543625,
                         0.0127472934234453,    0.0160241647771515,  0.0169282370441738,
                         0.0146581633940967,    0.00664932120185605, 0.0184078014982212,
                         0.0147123142773033,    0.0160373800627398,  0.0173248099341898,
                         0.0144707651046014,    0.00964685240424802, 0.0152812111003035,
                         0.0154159444178405,    0.012766333601145,   0.0133750963916763,
                         0.00775869320893195,   0.0115745725019383,  0.0126072258574388,
                         0.0118730063259957,    0.0186702295535874,  0.0104412542560585,
                         0.011040704751301,     0.019097130329094,   0.0104517202750981,
                         0.0107989879035808,    0.0143678659090546,  0.00802690877102008,
                         0.0150824975246017,    0.00529756306829137, 0.0118241767044997,
                         0.0147470768348098,    0.016749743264927,   0.0216293018933681,
                         0.0178864069740303,    0.0157534835911227,  0.0116892603433944,
                         0.0131090041912878,    0.0120429330632709,  0.0116736512591184,
                         0.0149372253101195,    0.0110505993986335,  0.0185730385270791,
                         0.00844475097936029,   0.0179767133600887,  0.0049455601223397,
                         0.0136714855844968,    0.0185038717302008,  0.0177167656815049,
                         0.0174041116094326,    0.00824314186506533, 0.0209151937252975,
                         0.00735221357433267,   0.016922342401036,   0.0206836885559241,
                         0.0100603298829186,    0.0158887597708516,  0.0142540803058183,
                         0.0148819103632265,    0.0187393236161845,  0.0118374747541151,
                         0.0144065734536873,    0.0125193594005422,  0.0101992025310553,
                         0.0183805489427708,    0.0107087074259675,  0.0107973855541459,
                         0.013739944584348,     0.0173683219723071,  0.0197471636687613,
                         0.015320203526806,     0.0156912283106501,  0.0100819519141667,
                         0.011228284419028,     0.00191103973534585, 0.0166328568180117,
                         0.0151429902809942,    0.0143177598525259,  0.0123857379205839,
                         0.0159941336752317,    0.0197070413736375,  0.0130320632291565,
                         0.0258571108077801,    0.00671073697208734, 0.0150127926811957,
                         0.0162176060678309,    0.0141885668384672,  0.0157995498227784,
                         0.00815827386356095,   0.00968271289992863, 0.0179683088559925,
                         0.0205940382414334,    0.0131839851343815,  0.0182976985286464,
                         0.0166533592631277,    0.0140803026757578,  0.0168952771329739,
                         0.0129467399414263,    0.016161499080588,   0.0147839314732141,
                         0.00947657338518835,   0.0110770881939385,  0.0179013928383464,
                         0.0177755140851332,    0.0132652876016552,  0.00855754285980712,
                         0.0136009701344618,    0.0141960662353939,  0.00657470307656212,
                         0.0180224480585169,    0.0138198584016813,  0.0125520320705411,
                         0.0107306676946931,    0.00936720234391039, 0.0154114969595556,
                         0.016091211796527,     0.0142482831673454,  0.0164799866076456,
                         0.0126982495896839,    0.0139536823523654,  0.0170321172872448};

            std::transform(begin(m_weights), end(m_weights), begin(m_weights), [](auto const w_l) {
                return w_l / (4.0 * M_PI);
            });

            m_coordinates = {{0, 0, 0, 1},
                             {1, 0.996972891319, 0, -0.077749945174},
                             {2, -0.982581060536, -0.178228496639, 0.052621881972},
                             {3, 0.783068336711, 0.621935399592, -0.000582043422},
                             {4, 0.495365041556, 0.804616360278, 0.327423255707},
                             {5, -0.268566696162, -0.734252990559, 0.62349376546},
                             {6, -0.518797826849, 0.854890674061, 0.003278758983},
                             {7, -0.960017419086, -0.108846768613, 0.257912651907},
                             {8, -0.676207321898, -0.38460134532, -0.628351384967},
                             {9, -0.224573966429, 0.968876550694, -0.104138192409},
                             {10, -0.850989429348, -0.128055589111, -0.509331677039},
                             {11, -0.117034299758, -0.382618734103, -0.916463789243},
                             {12, -0.242832540611, -0.371800943221, -0.895989071273},
                             {13, 0.118185369053, 0.536531573563, 0.835563336386},
                             {14, 0.387868988733, -0.178294868797, 0.904305582942},
                             {15, 0.762262920998, -0.607812974675, -0.222527811946},
                             {16, -0.205458031773, -0.88616321192, 0.415333310752},
                             {17, -0.400891098554, 0.129678481055, 0.906901217692},
                             {18, -0.161632828627, 0.963162162784, -0.214926677945},
                             {19, -0.296311835751, -0.045364855196, -0.954013273444},
                             {20, -0.983477624389, 0.105232740135, -0.147301842246},
                             {21, 0.939292243275, 0.340048361396, 0.045795126755},
                             {22, 0.40862157417, -0.911467140107, -0.047498017089},
                             {23, -0.846440610041, 0.074605441584, 0.527230805018},
                             {24, 0.922328935836, 0.351691018398, 0.160071114503},
                             {25, -0.562816608531, -0.184414466096, 0.805747336239},
                             {26, 0.688770932121, -0.033145296257, -0.724220955511},
                             {27, -0.069372194943, -0.958534292457, -0.276404610587},
                             {28, -0.066536764735, -0.736186242601, 0.673500315622},
                             {29, 0.170865010346, 0.129086130112, 0.976801883317},
                             {30, -0.17106546094, -0.267826821378, 0.948158953881},
                             {31, 0.078247253047, 0.900604217443, 0.427538782935},
                             {32, -0.037397470188, 0.999300353112, 0.000483212208},
                             {33, 0.722143991034, -0.519175144604, -0.457127143625},
                             {34, -0.341170368472, 0.932454689983, 0.118874012317},
                             {35, 0.913627041301, 0.17649893689, -0.366242753758},
                             {36, 0.981587060638, 0.097751278382, -0.164108287304},
                             {37, -0.175564913877, -0.385061463639, 0.906037874614},
                             {38, 0.035957359227, 0.620723016752, 0.783204957078},
                             {39, 0.893221107164, -0.378010326417, 0.243442491853},
                             {40, -0.854118167296, 0.519991968523, -0.009513620073},
                             {41, -0.903411487018, 0.211422207602, 0.373025917673},
                             {42, 0.752764931978, -0.304805260431, 0.583471259274},
                             {43, 0.8261626241, -0.08868419725, -0.556408511526},
                             {44, -0.907365714256, -0.045843090362, -0.417834742043},
                             {45, 0.838674106059, 0.383585781448, -0.386636382273},
                             {46, -0.88918904397, 0.081589968875, -0.450206531564},
                             {47, -0.954535134767, 0.141999887239, -0.262104384777},
                             {48, -0.812431876189, -0.44377699139, 0.378175129358},
                             {49, -0.61466830574, 0.456734263512, 0.643099281956},
                             {50, 0.00306948964, -0.98696663069, 0.160895767932},
                             {51, -0.789952684686, -0.046395411486, -0.611410027519},
                             {52, -0.521727387399, 0.763220583448, -0.38117564749},
                             {53, 0.090110621171, 0.995931340665, 0.000916860649},
                             {54, 0.547947478344, 0.73311513448, 0.402859479934},
                             {55, -0.008422701718, 0.525448072931, 0.850783980073},
                             {56, -0.362614348616, -0.153787438641, -0.919162802714},
                             {57, -0.70966056751, 0.688359325827, 0.15014432213},
                             {58, -0.569469411805, -0.126207289567, -0.812266156551},
                             {59, 0.463325320655, 0.885999474358, 0.018291491932},
                             {60, 0.988049242055, 0.125824672126, 0.08903284315},
                             {61, -0.912546938245, 0.408914451552, -0.006859796818},
                             {62, 0.281792257495, -0.2411249332, 0.928682879247},
                             {63, 0.414783752898, -0.730154896339, 0.542980907292},
                             {64, -0.39603414469, -0.469085834794, 0.789376612166},
                             {65, 0.753119395631, -0.657506022929, 0.022293625472},
                             {66, -0.854330924993, -0.399497714473, -0.332445855337},
                             {67, 0.70233042827, -0.657902370036, 0.271838998356},
                             {68, -0.329401105392, 0.777060217581, 0.536350939236},
                             {69, 0.925584459762, -0.25450617313, -0.28021423177},
                             {70, 0.861866730317, -0.173126139133, -0.476668731008},
                             {71, -0.74388226061, 0.650343317486, -0.153924500163},
                             {72, -0.986019999867, 0.158049444489, 0.052772464029},
                             {73, 0.343422352076, 0.456188930735, -0.820946251328},
                             {74, -0.034089820342, 0.216432245369, 0.975702294408},
                             {75, 0.662106849154, 0.392294899955, 0.638528959227},
                             {76, -0.617143323083, -0.704457794918, 0.350532928486},
                             {77, -0.877317131436, -0.337724751232, 0.340964284485},
                             {78, -0.137713797829, -0.013812094902, 0.990375754914},
                             {79, -0.416107550629, -0.435727602409, -0.798120268386},
                             {80, 0.373555412181, 0.341210619117, -0.862572702694},
                             {81, -0.811675510087, -0.250484422061, 0.527674540441},
                             {82, 0.583915213496, -0.714393467036, -0.385596936844},
                             {83, -0.910554514778, 0.174808261373, -0.374609860219},
                             {84, -0.801054223687, 0.591790331457, 0.089979632739},
                             {85, -0.825552356933, 0.422523218691, 0.374082124178},
                             {86, -0.043927842453, 0.256600779302, -0.965518712775},
                             {87, 0.598473834488, -0.755477780549, -0.266612813889},
                             {88, 0.463207873171, 0.027628676169, 0.885818899373},
                             {89, -0.647062404608, 0.41357127384, -0.640522478917},
                             {90, -0.717952628619, 0.314075721633, -0.621208873198},
                             {91, -0.205102905755, 0.38515809271, -0.89976999376},
                             {92, -0.183918566825, -0.597258508257, 0.780676780167},
                             {93, -0.050246935492, 0.639130698348, -0.767455012299},
                             {94, -0.412350520967, 0.595729761732, 0.689255467041},
                             {95, 0.281340239598, 0.836800646804, 0.469693886581},
                             {96, -0.108363708543, 0.30754615763, 0.945342619159},
                             {97, 0.508818204177, -0.855386046876, -0.097050223639},
                             {98, 0.339415368226, 0.842035563054, -0.419253286647},
                             {99, 0.60901500124, -0.279073287137, -0.742441128085},
                             {100, 0.818669629233, -0.094722271026, 0.566398913791},
                             {101, -0.6316720379, 0.683469016167, -0.365869567571},
                             {102, 0.234788475691, -0.768148800892, 0.595669196258},
                             {103, -0.997275258459, 0.067798737155, -0.029075592963},
                             {104, -0.829948233288, -0.556314104916, -0.041237685833},
                             {105, -0.656258690231, 0.596852018951, -0.461619105941},
                             {106, -0.189858522998, -0.947549770628, -0.257105374171},
                             {107, 0.153697006244, 0.982078862831, -0.109079500606},
                             {108, 0.354745613399, 0.767675713887, 0.533694245877},
                             {109, -0.136200871745, 0.164041989295, -0.977005398288},
                             {110, 0.298501595237, 0.255289167523, -0.919632665028},
                             {111, 0.494556093772, -0.212486497328, 0.842771474699},
                             {112, -0.595198664492, 0.80071344728, -0.067797677925},
                             {113, 0.057820406398, -0.256824253775, 0.964726957889},
                             {114, 0.285863667114, 0.147839841018, 0.946797415096},
                             {115, -0.488373282363, 0.633891485383, 0.599727539665},
                             {116, -0.90440949944, 0.093621872411, 0.416267224663},
                             {117, -0.842792321703, -0.25003967145, -0.476635358717},
                             {118, 0.336575112118, 0.720115040603, -0.606754911146},
                             {119, 0.652174274313, 0.164949608191, -0.73990563093},
                             {120, -0.773634673921, 0.031650297007, 0.632840935786},
                             {121, 0.027676526049, 0.993618792426, -0.109342147606},
                             {122, -0.131807177607, 0.505601709955, 0.852639301711},
                             {123, -0.662892576584, -0.098058818095, -0.742265383878},
                             {124, -0.637629867632, -0.495459192457, -0.58987146101},
                             {125, -0.842684049655, -0.508643052766, 0.176538486821},
                             {126, 0.922308651983, -0.334756475017, -0.193092860851},
                             {127, 0.206876378707, -0.263513985155, -0.942211517421},
                             {128, -0.542441106377, -0.828281095131, 0.140385446402},
                             {129, -0.644694739065, 0.113591543115, 0.755953473935},
                             {130, -0.686396578815, 0.486362629857, 0.540658051701},
                             {131, -0.918091159826, -0.12684523012, 0.375524845842},
                             {132, -0.035887452764, -0.997687693124, -0.057717915101},
                             {133, 0.375598722903, -0.061805930509, 0.924719214847},
                             {134, 0.012204326248, -0.381826056943, -0.924153621786},
                             {135, 0.870154020408, 0.212347524795, 0.444680232842},
                             {136, 0.557583529344, 0.810481180221, -0.179501711165},
                             {137, -0.827325980918, -0.536023937381, -0.167958506343},
                             {138, 0.880008792349, -0.123313705859, 0.458670094224},
                             {139, 0.239032198645, 0.778060786399, 0.580934609641},
                             {140, -0.182374068654, -0.494332465663, 0.849926533575},
                             {141, 0.2548258262, -0.960754025308, 0.109615241443},
                             {142, -0.732094368476, -0.434371652132, -0.524746704106},
                             {143, -0.409193091492, 0.303127182037, -0.860624729708},
                             {144, 0.973839385347, 0.227219646942, 0.002843165708},
                             {145, 0.852599094232, 0.029899675732, -0.521709491868},
                             {146, -0.865421257613, 0.381631687469, -0.324658746981},
                             {147, -0.851140660166, 0.46957912085, -0.234638074221},
                             {148, -0.43524693267, -0.778902881481, 0.451520108988},
                             {149, -0.86250042302, -0.140589572124, 0.486135364379},
                             {150, 0.068853757985, 0.437786924524, 0.896438379771},
                             {151, -0.316102984838, -0.94208809088, 0.112022015689},
                             {152, 0.072298030843, 0.622640817268, -0.779160707048},
                             {153, -0.121703393687, -0.975135118666, 0.185202009463},
                             {154, -0.824256633201, 0.532937006173, 0.191256764782},
                             {155, -0.448843624631, 0.751495341498, -0.483522649247},
                             {156, 0.960430729697, -0.172725273718, 0.218492089727},
                             {157, -0.475094535603, 0.595325701834, -0.647975687026},
                             {158, -0.621798769273, 0.760478804021, 0.187185146755},
                             {159, 0.156115395048, 0.933387611593, -0.323133950481},
                             {160, -0.216232023311, 0.832048352443, -0.510822132734},
                             {161, 0.087632697742, 0.216456219158, -0.972351384775},
                             {162, 0.306449505735, -0.022523706549, -0.951620398625},
                             {163, -0.404019035886, 0.91472564922, 0.006753169653},
                             {164, 0.341699821161, 0.939772074374, 0.008347481393},
                             {165, 0.33063272965, -0.801203007164, 0.498754187346},
                             {166, 0.493651916993, -0.869097850673, 0.031252372799},
                             {167, 0.687030623885, -0.702465205657, -0.185826684534},
                             {168, 0.455397383139, 0.793128154871, -0.404426697167},
                             {169, 0.446315909963, 0.109013117445, -0.888210700644},
                             {170, -0.79317389878, 0.166191220671, 0.585880230479},
                             {171, -0.499513807056, 0.07832310874, 0.86275804673},
                             {172, -0.413060433117, -0.749953387895, -0.516673005468},
                             {173, 0.660247585205, -0.620840796785, -0.422646224729},
                             {174, 0.197340052877, 0.445918888612, 0.873048250849},
                             {175, -0.529578656922, -0.066063541978, 0.845684370527},
                             {176, -0.224783229029, 0.913640016023, 0.33872469805},
                             {177, -0.735626467712, -0.142184730745, -0.662296914039},
                             {178, -0.735387762665, -0.5350566284, 0.415835596032},
                             {179, -0.056891801966, 0.419567637801, 0.905939468275},
                             {180, -0.733128196926, 0.678922123877, 0.039847165289},
                             {181, -0.633420401185, -0.64389397156, -0.429160982327},
                             {182, -0.401203479189, -0.849093150808, 0.343622743045},
                             {183, 0.621154458626, 0.057201234619, -0.781597823236},
                             {184, 0.994711334885, -0.102397948277, 0.008001277372},
                             {185, 0.376259016599, -0.124316920872, -0.918136403599},
                             {186, 0.585596435284, -0.125079879828, 0.800894399184},
                             {187, -0.485208746882, 0.67175762667, -0.559744730176},
                             {188, -0.400390480655, 0.887389155812, 0.22853435004},
                             {189, 0.095818983332, 0.233003545017, 0.967743804135},
                             {190, -0.293987369754, -0.784938606416, -0.545383177759},
                             {191, 0.641860843414, -0.743168756692, 0.188983747368},
                             {192, -0.330669437397, 0.036606592567, 0.943036415284},
                             {193, -0.94781258805, -0.080525101697, -0.308491500579},
                             {194, 0.606300617096, 0.515264043817, -0.605724794653},
                             {195, -0.301485622053, -0.639911772567, -0.706837564809},
                             {196, -0.275069345574, -0.191319838245, 0.942196144452},
                             {197, 0.36851710788, 0.532742930669, 0.761826824824},
                             {198, -0.174350142174, 0.665212194363, -0.726012923022},
                             {199, 0.964976288084, 0.148077520025, 0.216549789885},
                             {200, -0.104075707155, 0.936424840892, 0.3350772516},
                             {201, 0.48554694712, 0.51897274209, 0.703499435046},
                             {202, -0.766574070824, -0.320803985871, -0.556281400542},
                             {203, -0.223614782247, 0.92166048635, -0.317077872236},
                             {204, -0.450147311662, 0.087089791086, -0.888697229709},
                             {205, 0.170076169121, -0.315885406758, 0.933429433056},
                             {206, -0.079117500286, -0.915759738403, 0.393858505899},
                             {207, -0.589558746618, -0.60409828514, -0.536176972816},
                             {208, -0.692055074067, 0.672693192918, -0.261808408306},
                             {209, -0.729077827169, -0.098867915457, 0.677252284768},
                             {210, -0.607383389394, -0.329813394885, -0.722709168921},
                             {211, 0.048611858761, -0.485115882528, 0.873097627821},
                             {212, -0.359580564185, 0.259904007634, 0.896187326778},
                             {213, -0.876341721025, -0.242346159045, 0.416285391513},
                             {214, 0.767844529979, 0.44808540319, 0.457858328776},
                             {215, 0.499649778329, -0.796245580933, -0.341091005248},
                             {216, -0.885831813575, -0.286557891706, -0.364947356147},
                             {217, 0.115291676533, 0.780411825873, 0.614544718763},
                             {218, 0.160257666348, 0.836118370949, -0.524617527479},
                             {219, 0.660969748707, -0.032993718898, 0.749686871839},
                             {220, 0.928672889172, 0.31233219051, -0.200038165581},
                             {221, -0.547704232286, 0.412497518835, -0.727918862848},
                             {222, 0.577418163658, -0.469416470036, 0.668009312762},
                             {223, 0.83035414139, -0.540838602959, -0.134184967213},
                             {224, 0.396094341677, -0.822224763212, -0.408724493091},
                             {225, 0.042985647742, -0.93087392376, 0.362802938456},
                             {226, 0.921380372599, -0.145899900516, -0.360238015787},
                             {227, 0.446394847427, 0.434357693728, 0.782345853245},
                             {228, 0.086182451565, -0.993096647459, -0.079571564321},
                             {229, 0.52303946722, -0.672359428819, 0.523796252572},
                             {230, 0.9030579013, 0.088957205203, 0.420205952531},
                             {231, 0.156597721998, 0.842621424531, 0.515234207315},
                             {232, -0.719403124265, -0.686571794229, 0.105253580305},
                             {233, -0.746491005479, 0.507384310592, 0.430479198225},
                             {234, -0.993593457936, -0.023844889575, -0.110469278933},
                             {235, -0.101077920215, 0.988313390915, 0.114104756178},
                             {236, -0.088675149529, 0.606928019329, 0.789794338552},
                             {237, 0.436038735213, 0.688720986589, 0.579252642657},
                             {238, -0.378884634216, -0.674150245858, 0.634009368988},
                             {239, -0.626498637029, -0.767947205705, -0.133253694321},
                             {240, 0.406186134016, -0.867091100491, -0.288384895553},
                             {241, -0.688463910568, -0.723932272465, -0.044039853873},
                             {242, 0.280627074434, 0.805783603711, -0.521499021174},
                             {243, 0.153737366665, 0.693561432561, -0.703802075412},
                             {244, 0.199365964393, 0.890610414744, 0.408737447992},
                             {245, -0.018204924648, 0.544976834261, -0.838253440695},
                             {246, -0.681550334668, -0.690775700315, 0.241491352159},
                             {247, -0.537587823785, -0.555222292459, -0.634608176495},
                             {248, 0.090989830324, 0.97151513783, -0.218813134307},
                             {249, 0.379989622671, -0.922135766524, 0.072618969701},
                             {250, 0.566597174596, -0.002113841254, 0.823992216842},
                             {251, 0.018441409743, 0.94476457346, 0.327230522936},
                             {252, 0.345814825271, 0.249588326276, 0.904498631292},
                             {253, 0.874283374514, 0.404576594439, -0.268228186961},
                             {254, 0.399802428761, 0.344402780137, 0.849437898255},
                             {255, 0.963220672283, -0.057219511645, 0.262548783988},
                             {256, -0.994897296922, 0.035772866794, 0.094338065376},
                             {257, -0.156714993068, -0.987001810769, -0.0356066916},
                             {258, -0.927069069789, -0.225672399208, 0.299357492099},
                             {259, -0.23890339494, -0.728159342239, -0.642424423724},
                             {260, -0.237933816645, -0.565566766505, -0.789633922474},
                             {261, -0.486829202841, 0.204038379062, -0.849332483266},
                             {262, 0.126732104243, -0.888242067541, 0.44154841547},
                             {263, 0.380892736307, -0.840044165098, 0.386324376805},
                             {264, -0.853815222246, 0.194312669544, 0.482951501411},
                             {265, 0.707500645964, 0.551939817248, 0.441367504577},
                             {266, 0.593607703844, 0.499787786459, 0.630747225474},
                             {267, -0.210801429753, 0.58284453092, 0.784764302189},
                             {268, -0.359983711124, -0.542500531109, -0.759015745207},
                             {269, 0.701453114467, 0.630255410145, 0.332778674479},
                             {270, -0.92886583061, -0.349571013193, -0.122508675043},
                             {271, 0.777324035743, 0.528910387717, 0.340618768157},
                             {272, 0.085049559023, -0.803093446859, -0.589752056479},
                             {273, 0.945074862356, -0.032099836632, -0.32527389233},
                             {274, 0.450220156024, -0.640071342009, 0.622583719871},
                             {275, -0.764580586297, -0.611730355413, 0.202983987851},
                             {276, -0.625790395419, -0.778954108935, 0.040210411272},
                             {277, 0.828464844247, -0.469545585867, 0.305242435843},
                             {278, 0.72952130247, 0.325879265903, -0.601332997013},
                             {279, -0.476309054931, 0.831412475602, -0.286152021842},
                             {280, -0.342647093809, 0.794999973058, -0.50056768967},
                             {281, 0.320489163896, -0.621788849891, -0.714608509589},
                             {282, 0.960498146666, -0.135366129635, -0.243144650773},
                             {283, 0.386201127374, 0.624177240781, -0.679154961188},
                             {284, 0.274915339823, 0.955266143783, 0.109032795396},
                             {285, 0.452380920752, 0.674800989305, -0.583091011226},
                             {286, 0.626371644491, 0.305486564804, 0.717172588505},
                             {287, -0.500922220172, -0.864731207052, 0.036288688154},
                             {288, -0.20939077914, 0.814175055821, 0.541548225083},
                             {289, -0.866060286694, -0.426592948412, 0.260687621834},
                             {290, -0.757202650894, -0.604111423775, -0.248381829333},
                             {291, 0.474524749904, -0.541474754428, 0.693996651321},
                             {292, -0.78719556377, 0.615212768795, -0.042853161993},
                             {293, 0.282601552833, 0.901178731812, 0.328653701738},
                             {294, 0.054180730447, -0.954665655355, -0.292707934524},
                             {295, -0.958719484843, -0.235255871269, -0.159723587536},
                             {296, -0.392652775321, -0.575362380497, 0.717483051466},
                             {297, -0.561771637121, 0.820575748024, 0.105204892852},
                             {298, 0.823185361072, -0.215179177069, 0.525417722457},
                             {299, 0.983645755443, 0.03253251865, 0.177151525618},
                             {300, 0.019176892561, 0.32868040285, 0.944246493017},
                             {301, 0.023721096519, 0.993726985004, 0.109288557748},
                             {302, -0.71880745752, 0.261581505426, 0.644120295467},
                             {303, -0.306776472984, -0.922444171985, -0.234488688843},
                             {304, -0.439738720648, 0.40744051642, -0.800388707531},
                             {305, 0.678197541212, -0.275426864701, 0.681313538171},
                             {306, 0.556368501142, -0.574065964726, 0.600751495279},
                             {307, 0.470281288793, 0.239833697705, 0.849302835776},
                             {308, -0.865502721861, 0.288515012311, -0.409468101472},
                             {309, -0.099484958616, 0.989131449967, -0.108266881804},
                             {310, -0.150483582109, -0.915491849186, -0.373134514068},
                             {311, -0.419243439803, -0.883634189848, -0.208387995607},
                             {312, -0.917605895125, 0.267307387498, -0.294187324372},
                             {313, -0.286399753629, 0.93506544426, -0.208872679096},
                             {314, -0.222972817862, 0.967657131626, 0.117994907123},
                             {315, -0.032420948931, 0.903438800102, -0.427489434419},
                             {316, -0.084547388133, 0.724069707971, -0.684525234859},
                             {317, 0.262727067599, -0.874456907111, 0.407798486457},
                             {318, 0.286181442959, 0.623537927212, 0.727530504539},
                             {319, 0.721507640447, 0.570821841144, -0.391904517007},
                             {320, 0.096474309947, 0.899683833176, -0.42574840909},
                             {321, -0.055791274907, -0.282869193447, -0.957534517938},
                             {322, -0.373340138711, 0.691719004963, 0.618176317081},
                             {323, -0.199415911886, -0.975977491558, 0.087756652508},
                             {324, -0.469683737844, -0.143550852863, -0.871085724281},
                             {325, 0.729979445183, -0.666899296605, 0.149583882151},
                             {326, 0.894903606708, 0.42266659023, -0.143179915506},
                             {327, -0.164329643459, 0.959647501694, 0.228193866644},
                             {328, -0.557256121998, 0.170930277542, 0.812556739382},
                             {329, -0.664354856752, -0.329370888402, 0.670930281165},
                             {330, -0.055323287556, -0.070335722723, -0.995988062159},
                             {331, 0.48309920615, -0.746463594732, -0.457610378769},
                             {332, 0.251670190586, -0.669716936739, 0.698671124217},
                             {333, -0.309066738538, -0.261684561657, -0.914329777115},
                             {334, 0.205372356915, -0.462381552021, -0.862569124978},
                             {335, -0.078421507828, -0.994833420465, 0.06447117679},
                             {336, -0.407726365795, 0.824963141963, -0.391401360547},
                             {337, 0.011988387061, -0.574484484077, -0.818427673121},
                             {338, 0.761126573389, -0.640647284883, -0.101278801598},
                             {339, -0.594897448793, 0.210713862008, -0.775691107192},
                             {340, 0.044874600451, -0.998132783902, 0.04143930421},
                             {341, 0.175707971267, 0.302630226654, -0.936771933156},
                             {342, 0.264562208839, -0.545489755147, -0.795265845289},
                             {343, 0.827306017903, -0.561381158395, -0.020394796915},
                             {344, -0.567950337988, -0.620255190695, 0.541032265207},
                             {345, -0.292533959217, -0.538264843978, 0.790376391627},
                             {346, -0.323774816087, -0.839429919013, 0.436494306416},
                             {347, -0.064560509651, -0.442860238947, 0.894263243879},
                             {348, -0.342583684965, -0.830132230231, -0.439905557055},
                             {349, -0.442663945332, 0.346302385158, 0.827117458126},
                             {350, 0.954394456222, 0.083018261137, -0.28677376144},
                             {351, -0.280890478067, 0.851568611136, 0.442641434866},
                             {352, -0.511391507367, 0.750667642179, 0.418302303578},
                             {353, -0.66139991747, 0.50432808272, -0.55516063815},
                             {354, -0.568477570104, 0.763240101254, 0.307079468748},
                             {355, -0.941284247886, 0.323581835278, -0.096326323298},
                             {356, -0.446553915747, 0.726349799552, 0.522499348346},
                             {357, 0.277990958449, 0.905832414718, -0.319669616115},
                             {358, 0.564712706179, 0.61691216849, -0.548196074274},
                             {359, -0.171289742615, 0.677991811499, 0.714833496428},
                             {360, 0.540210065331, -0.810594619205, 0.226073989282},
                             {361, -0.25348946477, -0.054982895165, 0.965774286513},
                             {362, 0.04215082598, 0.122487517458, 0.991574563982},
                             {363, -0.955293563768, 0.234039896334, -0.180664146826},
                             {364, -0.922808417137, 0.370332593939, 0.106199788738},
                             {365, 0.653987538808, -0.366464314599, -0.661818861328},
                             {366, -0.454359973411, 0.883246382364, 0.115900140649},
                             {367, -0.055842912585, -0.218380193045, 0.974264676769},
                             {368, -0.423785012974, -0.603942596977, -0.675025630873},
                             {369, -0.170749146349, -0.805586775952, -0.567339999853},
                             {370, -0.538718513686, -0.247795086824, -0.805220440599},
                             {371, -0.464777325019, -0.696550753029, 0.546625179262},
                             {372, 0.924467469357, 0.17843439846, 0.33692887016},
                             {373, 0.47072801829, 0.858387096404, 0.203928236209},
                             {374, -0.88618844215, 0.32758466692, 0.327655811788},
                             {375, 0.378988579576, 0.832244833632, 0.404643291608},
                             {376, -0.268887025568, -0.896471131202, -0.352192104401},
                             {377, -0.361439546712, -0.699821592903, -0.616125954801},
                             {378, -0.04809566662, 0.697431585086, 0.715035657137},
                             {379, 0.767003463662, 0.153529615597, 0.623004288801},
                             {380, 0.96286981511, 0.238004521831, 0.127418863355},
                             {381, -0.034826731083, 0.975404901964, -0.217651960768},
                             {382, -0.722503892086, 0.591774747095, -0.357478355459},
                             {383, -0.81575979451, -0.365679157066, -0.448123545185},
                             {384, -0.629928640865, 0.34832929201, 0.694158923983},
                             {385, -0.171064354468, 0.276677402171, -0.945614404373},
                             {386, -0.177845244026, -0.658051452771, -0.731668883227},
                             {387, 0.150803260104, -0.729867122969, 0.666747598084},
                             {388, 0.035483995467, 0.714138854996, -0.699104128046},
                             {389, 0.60313388223, -0.784733957286, -0.14290604042},
                             {390, 0.02951203357, 0.945021688284, -0.325673223565},
                             {391, 0.153859807794, -0.847666770353, -0.507728476634},
                             {392, -0.566215228655, 0.507038862812, -0.649855296537},
                             {393, -0.962748313255, -0.204247165642, 0.177197010846},
                             {394, -0.289165130587, -0.430806050563, 0.854862371409},
                             {395, -0.81121189824, -0.505509745139, -0.293930525333},
                             {396, 0.041724390393, -0.587992835719, 0.807789267315},
                             {397, -0.297413325681, -0.463537749772, -0.834672431702},
                             {398, -0.46855928094, 0.877791845009, -0.099667833734},
                             {399, 0.424018334848, -0.86410390183, 0.27116950152},
                             {400, -0.293058962446, 0.645575406134, 0.705229636023},
                             {401, 0.826399736974, -0.502508165477, -0.254064988455},
                             {402, 0.412402300049, -0.000913151746, -0.911001377095},
                             {403, -0.707233894716, 0.377794850602, 0.597571141391},
                             {404, 0.046183722546, -0.768310972744, 0.638408421728},
                             {405, -0.521389932596, 0.310865017023, -0.794679482168},
                             {406, 0.237617352418, 0.070934289436, -0.968765358801},
                             {407, 0.410311155995, 0.218804935606, -0.885307379062},
                             {408, 0.65229732674, -0.500562523973, 0.56916197793},
                             {409, -0.938019584864, -0.20272231929, -0.281110155764},
                             {410, 0.723747731868, 0.685325252488, -0.080737345258},
                             {411, 0.304450551212, -0.90391991502, 0.300397485171},
                             {412, 0.220060917213, 0.877796730709, -0.425495114276},
                             {413, -0.041806294748, 0.974028658959, 0.222531807267},
                             {414, 0.281356566316, -0.35797860551, 0.890331286987},
                             {415, -0.717648374348, -0.002825551344, -0.696399904548},
                             {416, -0.593819103757, 0.564997837094, 0.572849296144},
                             {417, 0.942841811064, -0.286045368833, 0.170960130669},
                             {418, -0.760639963213, -0.649170021245, 0.002264923893},
                             {419, 0.986544255992, -0.113632943439, -0.117549926137},
                             {420, 0.705035080485, 0.440188591106, -0.556021168254},
                             {421, -0.645232594173, -0.624412874939, 0.440208429074},
                             {422, 0.676939169565, -0.669470951274, -0.305879071055},
                             {423, -0.285236792801, 0.865253528325, -0.412281825642},
                             {424, -0.041866775895, 0.898047694873, 0.437901256917},
                             {425, -0.891483475473, -0.023686328798, 0.452433609258},
                             {426, 0.497757706335, -0.506384734901, -0.704139024656},
                             {427, -0.736877246837, 0.502391141927, -0.452343966033},
                             {428, -0.354223207233, 0.504090522457, -0.78766659484},
                             {429, 0.13703479587, -0.561986780629, -0.815715834785},
                             {430, -0.667094382137, 0.691047299812, 0.278278124802},
                             {431, 0.947149222296, -0.318268761312, 0.040166482001},
                             {432, -0.777278616126, -0.474906210504, -0.412676682329},
                             {433, 0.343990887963, -0.919902059173, 0.188282953363},
                             {434, 0.56942286955, -0.707646170074, 0.418323431824},
                             {435, -0.050082011116, -0.482099734217, -0.874683736233},
                             {436, -0.922279720344, -0.318342286267, 0.219222047745},
                             {437, -0.177323173113, -0.056455877223, -0.982532048436},
                             {438, 0.911623650634, -0.393833554049, 0.117632696599},
                             {439, -0.358483825048, -0.103176045751, 0.927816819616},
                             {440, 0.787397279798, -0.207000146731, -0.580651757098},
                             {441, 0.744103639551, -0.121155553498, -0.65698638149},
                             {442, 0.675906339057, -0.156142408637, 0.720257015965},
                             {443, 0.683038757408, 0.698749285857, 0.2126205338},
                             {444, -0.145205587024, 0.570522399106, -0.808343695228},
                             {445, -0.079020092235, 0.365689080549, -0.927376580139},
                             {446, 0.076344261977, 0.705864790691, 0.704220456197},
                             {447, 0.507283555217, 0.809667617711, -0.295130044957},
                             {448, 0.858589180456, 0.267817923452, -0.437147777166},
                             {449, 0.525995298681, 0.0216738083, -0.850211263039},
                             {450, 0.498156197821, 0.577171672991, -0.647080568762},
                             {451, 0.917968532136, -0.264946796409, 0.295189717099},
                             {452, -0.850213135413, 0.192408083112, -0.490017095542},
                             {453, 0.34853274105, 0.049017024131, 0.936014027545},
                             {454, 0.588538472127, -0.359369446348, 0.724207199534},
                             {455, -0.113957484201, -0.574840890661, -0.810291084869},
                             {456, -0.580503237755, -0.524238577984, 0.623048877946},
                             {457, 0.433510197464, -0.607992497014, -0.66514211434},
                             {458, 0.336342526913, 0.91841150605, -0.208312289953},
                             {459, 0.658319516289, 0.29032048671, -0.694499409266},
                             {460, 0.684949398828, 0.728295894626, 0.020722232435},
                             {461, -0.565059061186, -0.823457914798, -0.051237875911},
                             {462, 0.504717094627, -0.307913649656, -0.806504704727},
                             {463, 0.481797240712, 0.289241755945, -0.827170251799},
                             {464, 0.01208931546, -0.983839679114, -0.178643035835},
                             {465, 0.761299080413, 0.467704851604, -0.449083379729},
                             {466, -0.853067203598, -0.01169466001, -0.521669992498},
                             {467, -0.978328964994, 0.196473647737, -0.065349384067},
                             {468, -0.375220888929, 0.19112635647, -0.907017089351},
                             {469, 0.174080765705, -0.925963654373, 0.335092819665},
                             {470, 0.485477314638, -0.093937132671, 0.869187892275},
                             {471, 0.670219332813, -0.390222650173, 0.63129417011},
                             {472, -0.826905109122, -0.040299334356, 0.560895626796},
                             {473, 0.412571963233, -0.893716469851, -0.176224988781},
                             {474, -0.938937347967, 0.048296787716, -0.340681782444},
                             {475, 0.533395090742, 0.473216951324, -0.701110115568},
                             {476, 0.402456655753, 0.908018547732, 0.116322642744},
                             {477, 0.738098724808, -0.419108456815, 0.528732800063},
                             {478, 0.975453862962, -0.217595036676, -0.033795876168},
                             {479, 0.534431513903, 0.838715071366, 0.104594388053},
                             {480, 0.618437671496, 0.577069450481, 0.533409501036},
                             {481, -0.820341438124, 0.091249121238, -0.564547183829},
                             {482, -0.463789473502, 0.224448559141, 0.857042687716},
                             {483, -0.66224792331, -0.535259694146, 0.524332669108},
                             {484, -0.159867740779, 0.188659487837, 0.968942672766},
                             {485, -0.792540706358, -0.145127433602, 0.592298283623},
                             {486, -0.639184631427, -0.215251162293, -0.738315612783},
                             {487, 0.875572524933, -0.389779677182, -0.285384927492},
                             {488, 0.570824116623, 0.789631685106, 0.225036951983},
                             {489, -0.763953789554, -0.634166089276, -0.1191972258},
                             {490, 0.860949015711, -0.356878889565, 0.362497242099},
                             {491, 0.206949875732, -0.972633611177, -0.105620108615},
                             {492, 0.654555651038, -0.15803182646, -0.739312411312},
                             {493, -0.687935526117, -0.541876987078, -0.482818850898},
                             {494, 0.452762600429, 0.761315145291, 0.464117740669},
                             {495, -0.503853368428, -0.362116442273, -0.784221566497},
                             {496, 0.513877272183, 0.710055970023, -0.48140489047},
                             {497, 0.387967855712, -0.403683910353, 0.82856517152},
                             {498, 0.214071377862, 0.951372025916, 0.221505560843},
                             {499, 0.316848690572, -0.940052822647, -0.126125326231},
                             {500, 0.448409354304, -0.420324714255, -0.788832165646},
                             {501, -0.252682711754, 0.47740806979, 0.84156579189},
                             {502, -0.461387358941, 0.506205916609, -0.728613254751},
                             {503, 0.181552458696, -0.935902713288, -0.301868872198},
                             {504, 0.090675067636, -0.911012331066, -0.402286669871},
                             {505, 0.922676485702, -0.031211435237, 0.384309704592},
                             {506, 0.10350219593, -0.825417183352, 0.554953843905},
                             {507, 0.215879546981, -0.950436596207, 0.223754994997},
                             {508, -0.114927521772, -0.740691213134, -0.661942740368},
                             {509, 0.072784711423, -0.658497311671, -0.749055189092},
                             {510, -0.556508809876, 0.663297189992, 0.500334670275},
                             {511, 0.901748536141, 0.431984407315, -0.015461222598},
                             {512, 0.799992479943, 0.02923411466, 0.599297420797},
                             {513, 0.86352251636, 0.149229579698, -0.481725436616},
                             {514, 0.150601019166, -0.633764319936, 0.758724007662},
                             {515, -0.539440285753, 0.822833668305, -0.178742642955},
                             {516, -0.381696006486, 0.698630670238, -0.605163899482},
                             {517, -0.526390002749, -0.831810021948, -0.1760842196},
                             {518, -0.659378863391, -0.203662497673, 0.723699593447},
                             {519, -0.429850544661, -0.893000280847, 0.13333794532},
                             {520, -0.252777036347, 0.734921818875, 0.629280295288},
                             {521, -0.274819696579, -0.961418098747, -0.012221856384},
                             {522, -0.563563267305, 0.68244148005, -0.465478323933},
                             {523, 0.671793350511, 0.663799964573, -0.328729830168},
                             {524, 0.256920943011, -0.138713716845, -0.956425707413},
                             {525, -0.177607832609, -0.693394866613, 0.698325867164},
                             {526, -0.583183170125, -0.418392771878, 0.696308034222},
                             {527, -0.772149033221, 0.402872213931, 0.491405992778},
                             {528, -0.885642252839, -0.456800698415, -0.083492047009},
                             {529, 0.242202312707, 0.015073420178, 0.970108670059},
                             {530, 0.033585936932, 0.845469868302, 0.53296593384},
                             {531, 0.581356265779, 0.21552132839, 0.784586164324},
                             {532, 0.087745169621, -0.96396063547, 0.251158671904},
                             {533, -0.986348189622, -0.148208193215, -0.071774510052},
                             {534, -0.383906459217, -0.863518609257, -0.327034313242},
                             {535, -0.479546540076, -0.496840689813, -0.723314900197},
                             {536, 0.783848511077, -0.576002115443, 0.23195489796},
                             {537, -0.293191913927, 0.292183707352, -0.910311585539},
                             {538, -0.512892958994, 0.830042392996, 0.219021547899},
                             {539, 0.97560524763, -0.200244995081, 0.089979679602},
                             {540, -0.264377236823, 0.586180709898, -0.765830824656},
                             {541, -0.473548515367, -0.846072101589, 0.244772961144},
                             {542, -0.457543372176, 0.82586049158, 0.329558054105},
                             {543, 0.281138476354, -0.930723986208, -0.233910278977},
                             {544, 0.041650613698, -0.683577422, 0.728688640306},
                             {545, -0.925355986337, -0.379047714843, 0.006255271581},
                             {546, 0.145043904172, 0.345528113927, 0.927131375992},
                             {547, 0.024077930208, 0.031110763012, -0.999225887226},
                             {548, -0.947826385203, 0.106771650174, 0.300374696392},
                             {549, 0.279454008096, 0.954601923665, -0.1031534037},
                             {550, 0.802768960808, 0.237852237119, -0.546798234142},
                             {551, -0.639826647957, 0.233381658359, 0.732225963829},
                             {552, 0.054611437376, -0.374736276443, 0.925521644277},
                             {553, -0.100560146439, 0.047998705807, -0.993772499715},
                             {554, -0.749237731473, 0.099731672757, -0.654749123853},
                             {555, 0.010108825896, -0.740242141123, -0.672264370724},
                             {556, -0.457581304003, -0.153605984392, 0.875799378731},
                             {557, 0.250983217486, -0.709982706454, -0.657975669062},
                             {558, 0.455336833001, 0.409929693273, -0.790332850821},
                             {559, -0.692755268756, 0.211674523462, -0.689408466534},
                             {560, -0.492020127649, -0.50117547111, 0.711856264386},
                             {561, -0.974425244157, -0.114942832671, -0.193089587413},
                             {562, -0.987087885717, -0.085269276172, 0.135597405621},
                             {563, -0.215725669628, 0.075530593729, 0.973528409896},
                             {564, 0.45036797735, 0.870780355651, -0.197256830528},
                             {565, -0.790331303989, -0.198917732818, -0.579489573251},
                             {566, 0.567434726119, -0.656184466474, -0.497433189035},
                             {567, 0.322113126823, 0.700093446303, 0.637269409255},
                             {568, -0.122552846604, -0.858688031553, 0.497630047583},
                             {569, -0.873523698346, -0.484383123089, 0.048263220932},
                             {570, -0.577067362774, -0.775318382547, 0.256660601778},
                             {571, -0.777404913427, 0.207721328109, -0.593711588592},
                             {572, -0.389032897947, -0.921136932561, 0.012655267178},
                             {573, -0.888207668821, 0.444077927834, -0.117821606922},
                             {574, -0.786383560759, 0.288151816601, 0.546415067469},
                             {575, 0.948931924863, 0.198230580259, -0.245423794742},
                             {576, -0.544429015339, -0.70668398363, 0.45187918135},
                             {577, 0.502789890401, -0.795321945597, 0.338622694105},
                             {578, 0.800392771766, -0.472045143849, -0.369519678872},
                             {579, 0.273816111252, 0.350223653925, 0.895750037371},
                             {580, -0.044839700211, -0.811182323879, -0.583071726901},
                             {581, 0.166196724225, -0.427419217886, 0.888645858055},
                             {582, -0.692116979241, 0.718778814277, -0.065811117551},
                             {583, 0.884106186808, 0.302577345596, 0.356094370048},
                             {584, -0.231040327389, -0.963343973383, -0.136340588479},
                             {585, -0.509605636768, -0.783123935622, 0.356397245262},
                             {586, -0.287144783764, -0.639626239525, 0.713040073816},
                             {587, -0.817909507973, -0.350241682864, 0.456458979922},
                             {588, -0.280529131067, -0.31660957862, 0.906124594826},
                             {589, -0.10028634042, -0.869787357135, -0.483127936777},
                             {590, -0.975814570925, 0.12767622591, 0.177439298092},
                             {591, 0.26548628778, -0.572027079087, 0.776081214689},
                             {592, -0.940818081842, -0.009690367822, 0.338773425244},
                             {593, -0.285032661528, 0.958492167982, 0.007010405026},
                             {594, 0.151864135587, 0.982075137775, 0.11164993545},
                             {595, -0.409142877884, -0.03353761888, -0.911853789594},
                             {596, -0.902162263073, -0.167364627904, -0.397608265021},
                             {597, 0.168718695943, -0.985526336198, 0.0164876408},
                             {598, 0.978726780656, -0.018238893281, -0.204355649782},
                             {599, 0.270488937697, -0.356205898042, -0.894400968684},
                             {600, 0.623245020184, 0.644686850768, -0.442656197588},
                             {601, -0.111273044338, -0.981103160399, -0.158287391342},
                             {602, 0.568746052154, 0.732845684076, -0.373450306587},
                             {603, -0.64414145104, 0.763507987027, 0.04623142653},
                             {604, 0.893816473016, -0.057229598883, -0.4447661021},
                             {605, 0.772393045649, -0.409609455526, -0.485416395454},
                             {606, 0.621826578196, -0.605618790127, 0.496545655196},
                             {607, 0.39031496523, -0.332272757028, -0.858632076535},
                             {608, 0.669271115176, 0.546806695808, -0.503069191872},
                             {609, -0.232363212822, 0.278692328836, 0.93184651267},
                             {610, 0.75314112515, -0.557200943953, 0.349722109203},
                             {611, 0.516046388823, 0.852826565838, -0.079893511526},
                             {612, -0.694653707996, 0.007564493663, 0.719304528279},
                             {613, -0.75336893475, 0.615805609537, 0.230691784457},
                             {614, 0.517573096622, 0.597205321757, 0.612751085938},
                             {615, 0.395042941549, 0.864374739786, -0.311122778903},
                             {616, 0.2604879943, 0.378655485099, -0.888125007209},
                             {617, 0.051181636294, 0.332624691087, -0.941669397924},
                             {618, 0.81407987194, -0.332039202543, 0.476470282469},
                             {619, -0.794886131772, -0.53098184187, 0.293622753073},
                             {620, 0.424593436939, 0.520875703862, -0.740546362111},
                             {621, -0.951055315049, -0.294610802307, 0.093264478135},
                             {622, -0.304446959247, 0.362971334794, 0.880661035316},
                             {623, 0.634862694743, -0.556628699512, -0.535830056737},
                             {624, 0.21826347383, 0.248525876719, 0.943713910352},
                             {625, -0.616600870055, 0.681999558766, 0.393293743773},
                             {626, -0.644061969799, 0.74522856141, -0.172680544119},
                             {627, -0.241654285755, -0.817469775973, 0.522825373855},
                             {628, -0.096403307382, 0.941838470741, -0.321942071431},
                             {629, -0.009475982445, 0.144785244295, -0.989417727146},
                             {630, -0.284637177087, -0.901396559894, 0.326291157144},
                             {631, 0.810902138983, 0.569952296029, 0.132635218716},
                             {632, 0.608837286286, -0.731507058344, 0.306943940191},
                             {633, -0.634994726639, -0.091006273606, 0.76713724672},
                             {634, 0.333923030659, -0.709162528654, 0.620954038194},
                             {635, -0.347848669059, 0.932046010214, -0.101447219175},
                             {636, 0.757747566426, 0.594084025374, -0.269968139548},
                             {637, 0.527390826472, 0.122684791704, 0.840718358333},
                             {638, 0.083412977292, 0.972906862862, 0.2156258598},
                             {639, -0.668816600217, -0.673555882808, -0.314653504683},
                             {640, 0.668604264271, -0.740824242157, 0.064403261026},
                             {641, 0.699385785264, 0.68592830071, -0.200902687032},
                             {642, -0.659279958313, 0.106031119981, -0.744383864792},
                             {643, -0.221816417219, 0.062066206217, -0.97311112577},
                             {644, 0.235503482778, -0.785152627096, -0.572776973842},
                             {645, 0.391027818556, -0.29275825577, 0.872576557555},
                             {646, 0.843673811668, -0.364342774168, -0.394295374583},
                             {647, 0.201181337779, 0.707301077877, 0.677680791054},
                             {648, 0.803815902223, 0.492692334451, -0.333368053219},
                             {649, 0.335077681332, 0.124062459687, -0.93398685942},
                             {650, 0.21852954216, 0.756321021076, -0.616622536307},
                             {651, -0.799469375185, 0.304602426928, -0.517750982279},
                             {652, -0.526924925298, -0.701900869864, -0.479254934231},
                             {653, 0.88186504041, 0.455171621569, 0.123015630798},
                             {654, -0.745541307905, -0.345088608099, 0.570159636215},
                             {655, 0.142974151735, -0.372656438603, -0.916889072191},
                             {656, 0.761584695151, 0.604442907511, 0.233746708365},
                             {657, 0.387387393547, -0.526120524696, -0.757052310487},
                             {658, -0.113082274067, 0.470795296734, -0.874965249518},
                             {659, -0.071660778852, -0.645258185352, 0.760596218114},
                             {660, -0.120305519458, -0.174465491436, -0.977286229457},
                             {661, -0.13088816086, 0.762794709226, 0.633255494191},
                             {662, 0.556126248066, -0.396444403576, -0.730448787448},
                             {663, 0.636639600828, 0.763725610087, -0.106832631513},
                             {664, 0.363305849747, -0.611022800262, 0.703320692927},
                             {665, -0.071089625891, -0.54700122134, 0.834107864094},
                             {666, 0.853848029513, -0.485816763959, 0.186883959595},
                             {667, -0.184102096793, -0.275383224402, -0.943541465795},
                             {668, 0.276173370634, -0.116957623438, 0.953964980318},
                             {669, -0.446516377387, 0.487953077824, 0.750016612194},
                             {670, 0.488235068427, -0.437073003, 0.755376533926},
                             {671, -0.998315750096, -0.056820202738, 0.011710152473},
                             {672, -0.036732793764, -0.819662632521, 0.571667622583},
                             {673, -0.053183440962, -0.662680107441, -0.747011778227},
                             {674, 0.802013951069, 0.24418096947, 0.545114003159},
                             {675, -0.284150645739, 0.930665103308, 0.230479665069},
                             {676, -0.531757094495, 0.410126017177, 0.740966289711},
                             {677, 0.009092233292, -0.878835231696, 0.477038747717},
                             {678, -0.77916148032, 0.57518841726, -0.249129830079},
                             {679, 0.911331022567, 0.059508021152, -0.407350663096},
                             {680, -0.910001031799, 0.357836238625, -0.209407135625},
                             {681, 0.536129275771, 0.671007933528, 0.512165747395},
                             {682, 0.630448300905, 0.646959995558, 0.428926222133},
                             {683, 0.884119299498, -0.440373394242, -0.156218878178},
                             {684, -0.799757721452, 0.491158023684, -0.345183114809},
                             {685, 0.192600844054, 0.596630848042, -0.779061323668},
                             {686, 0.790955413934, -0.445780438682, 0.419129256504},
                             {687, 0.212820811991, -0.83524803252, 0.507018763119},
                             {688, -0.482209156516, -0.274702958576, 0.831872955397},
                             {689, 0.462599370761, -0.873269611938, 0.152977145475},
                             {690, 0.519342866523, 0.330332774694, 0.788139102541},
                             {691, -0.162469949306, 0.986703828963, 0.004366861748},
                             {692, -0.161826066145, 0.881932481797, 0.442727254488},
                             {693, -0.008210157057, 0.777259670757, 0.629126376443},
                             {694, 0.703707615855, -0.24562893058, -0.666679848091},
                             {695, 0.942395072646, 0.325294451751, -0.077942586},
                             {696, 0.035893741387, 0.852763114194, -0.521063057988},
                             {697, 0.129311893344, -0.982328714693, 0.135309757701},
                             {698, 0.324535098883, 0.444488758457, 0.834929166575},
                             {699, 0.216164224377, 0.952445277515, -0.214758053256},
                             {700, 0.961543173752, -0.226010369152, -0.156057803546},
                             {701, -0.348042984572, 0.886149311187, -0.305950125303},
                             {702, 0.931318550307, 0.265386989709, 0.249430358112},
                             {703, 0.900807438538, 0.292364490309, -0.321043553868},
                             {704, 0.745379857498, -0.064083203157, 0.663552719164},
                             {705, 0.818655111781, -0.290326936891, -0.495493771575},
                             {706, -0.581058683394, -0.300452414203, 0.756372364152},
                             {707, -0.330781430461, 0.546415787383, 0.769424091487},
                             {708, 0.400500821853, 0.91149294762, -0.093700043407},
                             {709, 0.379047006524, -0.509887952142, 0.772229009495},
                             {710, 0.572923066049, -0.812570509497, 0.107183615744},
                             {711, -0.794008521639, 0.521487222309, 0.312412458992},
                             {712, -0.914735551526, -0.320304081531, -0.24630096656},
                             {713, -0.162692266738, -0.938395424504, 0.304869240188},
                             {714, -0.959897348923, 0.245854089208, 0.134732499236},
                             {715, -0.963200007491, -0.266647265244, -0.033837575372},
                             {716, -0.825597989853, 0.547531829198, -0.136370286959},
                             {717, -0.397840450176, 0.807233290893, 0.436001594352},
                             {718, -0.73550108901, 0.408317124781, -0.540661884801},
                             {719, 0.599151717885, -0.480594063608, -0.640348783852},
                             {720, -0.479056142832, -0.657845135796, -0.581158316919},
                             {721, -0.223189296471, -0.857242530042, -0.464027782173},
                             {722, -0.030080026104, -0.920399906973, -0.389819449583},
                             {723, 0.105739786786, 0.523071877357, -0.845703794841},
                             {724, 0.560496338003, 0.417234587721, 0.715373436671},
                             {725, -0.162807781767, 0.772044440535, -0.614362277516},
                             {726, 0.833699345219, 0.509328875897, -0.213376423157},
                             {727, -0.359288638975, -0.904001352841, 0.231717992321},
                             {728, 0.072482546818, -0.072966755034, -0.994697005659},
                             {729, 0.741699791872, -0.331027327166, -0.583354375492},
                             {730, -0.243237087366, -0.161741822467, -0.956386586164},
                             {731, -0.598805931496, -0.759226411615, -0.254964139267},
                             {732, -0.73399243854, -0.236717301706, 0.636568943037},
                             {733, -0.566900540735, -0.735935987759, -0.370164826578},
                             {734, 0.629041406263, 0.0924608493, 0.771853548643},
                             {735, 0.553397504856, -0.189146432136, -0.811156476168},
                             {736, -0.434725644763, -0.261512686244, -0.861756768885},
                             {737, -0.807224618297, 0.399545268477, -0.434455974816},
                             {738, -0.082447822724, 0.09651645749, 0.991910746974},
                             {739, -0.492839913192, -0.389518613995, 0.778064309242},
                             {740, 0.372387672413, -0.766586110671, -0.523137798635},
                             {741, -0.346749058607, -0.931243370294, -0.112030690614},
                             {742, 0.594848147373, -0.068916085148, -0.800878426963},
                             {743, 0.215360834209, 0.976534090917, 0.000938278313},
                             {744, 0.015263306423, 0.442488046943, -0.896644500228},
                             {745, 0.358519277703, -0.700657417794, -0.616881763716},
                             {746, -0.370959595816, 0.436643260632, 0.819592362834},
                             {747, -0.376841735952, -0.239576913369, 0.894758743252},
                             {748, 0.310178040948, 0.563390412891, -0.765755068919},
                             {749, 0.413708376164, 0.146171324768, 0.898598532888},
                             {750, 0.841620194204, 0.121521342374, 0.526220497563},
                             {751, 0.577762949967, 0.247630617417, -0.77773327752},
                             {752, -0.694194295579, -0.693629344867, -0.192282635529},
                             {753, 0.121230605399, 0.092760205236, -0.988280670983},
                             {754, 0.877802417656, -0.241448143357, 0.413721778042},
                             {755, 0.210067487085, 0.186463516233, -0.959741115085},
                             {756, -0.591914600591, 0.02272759723, 0.805680185887},
                             {757, -0.457567373685, -0.789199108533, -0.409630157128},
                             {758, -0.276330232717, 0.758122999253, -0.590670060601},
                             {759, -0.026371079884, 0.793977487212, -0.607374938523},
                             {760, -0.056133511057, -0.102273107113, 0.993171304709},
                             {761, -0.494339179818, -0.817384273134, -0.295823807917},
                             {762, 0.136578065816, -0.732926261124, -0.666457446273},
                             {763, 0.162030767995, 0.626435592459, 0.762446377605},
                             {764, 0.288727494138, -0.832051181516, -0.47363199371},
                             {765, 0.749916145495, 0.363227657613, 0.552893699974},
                             {766, 0.275596386087, -0.468331485092, 0.839471412287},
                             {767, 0.098106507213, 0.781623597756, -0.615986740663},
                             {768, -0.24156668986, -0.947276798102, 0.210504636831},
                             {769, 0.666744608555, -0.636807029798, 0.387205931983},
                             {770, 0.270637229513, 0.663433162862, -0.697575751024},
                             {771, 0.46708919244, -0.681790546137, -0.563018061436},
                             {772, 0.882550325447, 0.391130801364, 0.261001186353},
                             {773, -0.04062226855, -0.959905461889, 0.277364986136},
                             {774, -0.17574570832, -0.477830812029, -0.860692256897},
                             {775, 0.799094297787, 0.116886640466, -0.589733682711},
                             {776, -0.625114055391, 0.314903163283, -0.714190741684},
                             {777, -0.457811593695, -0.884968798303, -0.085080965602},
                             {778, 0.169587324868, -0.199977486427, 0.96501250985},
                             {779, -0.975797890626, 0.00960546433, 0.218463296012},
                             {780, 0.207294577416, -0.888715235039, -0.408918316029},
                             {781, 0.1652109688, -0.081455851574, 0.982888742449},
                             {782, 0.331100600736, -0.44365398529, -0.832792611356},
                             {783, 0.180776069703, -0.034865366393, -0.982906108868},
                             {784, -0.342824106413, 0.876577760755, 0.337761841262},
                             {785, 0.680013522113, 0.185233783319, 0.70941529111},
                             {786, 0.615166986557, 0.745411867757, -0.256769791948},
                             {787, 0.755411692104, -0.186529549835, 0.628140034126},
                             {788, 0.406165632156, 0.6141164243, 0.67667606479},
                             {789, 0.867665034582, -0.002282739467, 0.497144020244},
                             {790, -0.515405243206, -0.019249979145, -0.856730338893},
                             {791, 0.711337144769, -0.529818919135, 0.461834796652},
                             {792, 0.538963420012, 0.150964615418, -0.828690603772},
                             {793, -0.36594944489, -0.353983352354, -0.86068390832},
                             {794, 0.511577933574, -0.830396908541, -0.220746443156},
                             {795, -0.668267235015, -0.437251191155, 0.601855712309},
                             {796, 0.637606340223, 0.406434381997, -0.654422835816},
                             {797, -0.958220283051, 0.285452286279, 0.018190145883},
                             {798, 0.444082374658, -0.217709173225, -0.869133798912},
                             {799, -0.289289189908, 0.166878655945, 0.942583300718},
                             {800, 0.195210206059, -0.640072236202, -0.743101949865},
                             {801, -0.338521526896, 0.074165920968, -0.938031231887},
                             {802, 0.83510975175, 0.497625515408, 0.234436662975},
                             {803, 0.682624073801, -0.728265115607, -0.060450767222},
                             {804, -0.707665196464, -0.268480770493, -0.653550338986},
                             {805, -0.059362828026, -0.332646113271, 0.94118150108},
                             {806, 0.824211150089, 0.333124888799, 0.457934262238},
                             {807, 0.778672732354, -0.003720471191, -0.627419264912},
                             {808, -0.181668291577, 0.395071936082, 0.900508077229},
                             {809, -0.728148523583, -0.577754056322, -0.368781748473},
                             {810, -0.842387605154, 0.311673845926, 0.439593603739},
                             {811, -0.276792910402, 0.681518804206, -0.67743472325},
                             {812, 0.897791810052, -0.438943753867, -0.036031191279},
                             {813, 0.24485635413, 0.538503514191, 0.806262569543},
                             {814, -0.258338381456, 0.179005147276, -0.949325254017},
                             {815, 0.61894458669, 0.721490321647, 0.310417967226},
                             {816, -0.877362005513, -0.431522324285, -0.2098199107},
                             {817, 0.848639889373, 0.528033848927, 0.031473680299},
                             {818, -0.236839082258, 0.488505998314, -0.839803035674},
                             {819, -0.873418557361, 0.475728806131, 0.104029450994},
                             {820, 0.939543005708, -0.334052107309, -0.075286984447},
                             {821, -0.522624028549, 0.529775262144, 0.667983754595},
                             {822, 0.53868174019, -0.585617756036, -0.605701103351},
                             {823, 0.325700397427, -0.239505032129, -0.914634676087},
                             {824, -0.545306264044, 0.296840432727, 0.783917620603},
                             {825, 0.720377602584, 0.081326862605, -0.688797540003},
                             {826, 0.143727367025, 0.937742620391, 0.316198073793},
                             {827, 0.226981947448, 0.491912306485, -0.840536422923},
                             {828, 0.487893122163, -0.096868418378, -0.867511850563},
                             {829, 0.397953272301, 0.868090973656, 0.296734316388},
                             {830, 0.806189946977, -0.581736546045, 0.107890501847},
                             {831, 0.720546631844, 0.275440784391, 0.636352831086},
                             {832, 0.88474506836, -0.25795223, -0.388183991234},
                             {833, -0.1552527509, -0.783450250362, 0.601749356913},
                             {834, 0.687973581022, 0.475898058562, 0.547917320106},
                             {835, -0.866232696714, 0.435459814867, 0.244980947789},
                             {836, 0.398091554935, 0.763656234214, -0.508283650963},
                             {837, 0.951124859307, 0.059486344959, 0.303022898098},
                             {838, 0.831457601713, 0.422350642638, 0.360968407504},
                             {839, 0.077002070141, -0.278396761547, -0.957374495354},
                             {840, -0.157653618634, 0.893762931322, -0.419920419993},
                             {841, 0.8459424722, 0.526073720051, -0.087337132995},
                             {842, 0.158731400123, -0.533529657643, 0.830752939827},
                             {843, 0.494773346928, -0.327119963228, 0.805103636079},
                             {844, 0.139862875987, -0.970074546222, -0.198478590013},
                             {845, -0.973622617089, 0.012542386069, -0.227819419812},
                             {846, 0.008354735271, -0.18010139261, -0.983612569449},
                             {847, 0.025228109165, -0.867471030703, -0.496847615873},
                             {848, -0.746022261915, -0.44417935248, 0.496140592533},
                             {849, 0.55994377822, 0.363547894794, -0.744510505919},
                             {850, -0.555558572846, 0.102716949204, -0.825108417412},
                             {851, -0.168873622591, -0.144750536136, 0.974950758696},
                             {852, -0.575973089396, -0.43902913459, -0.689571185065},
                             {853, -0.389948712647, -0.357804011941, 0.84847880972},
                             {854, -0.712671252105, 0.604651208939, 0.355663607854},
                             {855, 0.927801715997, -0.14907510723, 0.341995011948},
                             {856, 0.998719286333, 0.012226046911, 0.049094917079},
                             {857, -0.325915221932, 0.400740401337, -0.856263043024},
                             {858, 0.332029757216, 0.919053073999, 0.212362161166},
                             {859, -0.724952201383, 0.137750642889, 0.674884483518},
                             {860, 0.738261726508, 0.665624673282, 0.109148602793},
                             {861, -0.433245814889, -0.013097911283, 0.9011806193},
                             {862, 0.057867910684, -0.129914453871, 0.989835107272},
                             {863, 0.590989573119, 0.806677112689, 0.001833120034},
                             {864, -0.095714008155, 0.846689437061, -0.523407896208},
                             {865, 0.782803198093, 0.605014584329, -0.145521496021},
                             {866, 0.591748592215, -0.244396685384, 0.768182181377},
                             {867, -0.637536569751, -0.755208684676, 0.152338323547},
                             {868, 0.992784879648, 0.113871513046, -0.037569419198},
                             {869, -0.904389723249, -0.404704856805, 0.135252383933},
                             {870, -0.354692691726, -0.762612508775, 0.540939234938},
                             {871, -0.371424669451, 0.605549546169, -0.703813513693},
                             {872, 0.114597638138, 0.021046052813, 0.993189027826},
                             {873, 0.745442861896, -0.573804706471, -0.339209520033},
                             {874, -0.940414017393, 0.22187543318, 0.257667941431},
                             {875, -0.807052253738, -0.583557164421, 0.09015373309},
                             {876, -0.587063299408, 0.760292711848, -0.278049770363},
                             {877, -0.615249929854, 0.001360254508, -0.788330941624},
                             {878, 0.306572844202, -0.887143084637, -0.344949617449},
                             {879, 0.72012668134, 0.060952298667, 0.691160169649},
                             {880, 0.593013055166, -0.805004273899, -0.017425137238},
                             {881, 0.460486926048, -0.768387672351, 0.444445920127},
                             {882, 0.140813220567, -0.168698439417, -0.975557519294},
                             {883, -0.917393381624, 0.335466333419, 0.214130153167},
                             {884, 0.690760554403, -0.448501029972, -0.56718311205},
                             {885, 0.73402274463, 0.203679049759, -0.647862219191},
                             {886, 0.633687213272, 0.763767942902, 0.122878171909},
                             {887, 0.870821834791, -0.487559848628, 0.062886612697},
                             {888, -0.483525689647, -0.603789973772, 0.633751193312},
                             {889, -0.71369203987, -0.617534438224, 0.330597776511},
                             {890, 0.790278347327, 0.356337594353, -0.498481346288},
                             {891, -0.5784939709, 0.592450662968, -0.560666511912},
                             {892, -0.657996583785, 0.589237495048, 0.468870632646},
                             {893, 0.290239862492, -0.956932598442, -0.006389386524},
                             {894, -0.411147369576, 0.888745371649, -0.20270546333},
                             {895, 0.969441584378, 0.212475062411, -0.122626923355},
                             {896, -0.088269347497, 0.83662193925, 0.540622098195},
                             {897, 0.07677542403, -0.475257647454, -0.876490560589},
                             {898, 0.139495770207, 0.416048998448, -0.898578967584},
                             {899, 0.987329964301, -0.083528586978, 0.134916703009}};

            break;
        }
    }
    this->precompute_coordinates();
}

void unit_sphere_quadrature::precompute_coordinates()
{
    this->evaluate([](auto const& coordinate) {
        auto const& [l, r1, r2, r3] = coordinate;

        vector3 t(r1, r2, r3);

        return std::make_tuple(t, t * t.transpose());
    });
}
}
